/*
在小明曾经玩过的一种对号码的纸牌游戏(乐透)里,玩家必须从{1,2,……，49}中选择6个数。玩Lotto的一个流行策略是（虽然它并不增加你赢的机会）：就是从这49个数中，选出k（k>6）个数组成一个子集S，然后只从S里拿出牌来玩几局游戏。例如，k=8，s={1,2,3,5,8,13,21,34}，那么有28场可能的游戏：[1,2,3,5,8,13],[1,2,3,5,8,21],[1,2,3,5,8,34],[1,2,3,5,13,21],……,[3,5,8,13,21,24]。
读取数字k和一组数S，输出由S中的数组成的所有可能的游戏。
Input
输入数据有多组，每组一行，每行有多个整数，其中第一个整数为数字k，接下来有k个整数，即子集S。当k为0，输入结束。
Output
输出由S中的数组成的所有可能的游戏。每种游戏一行。
Sample Input
7 
1 2 3 4 5 6 7
0
Sample Output
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7
*/
// 修改——>输入n个数，输出选其中k个的所有可能性，以及个数
// #include <iostream>
// #include <bits/stdc++.h>
// using namespace std;
// int main()
// {
//     int s[50],n,k,a,i,flag,sum;
//     while((cin>>n>>k)&&n)
//     {
//         for(i=0;i<n;i++)
//         {
//             cin>>s[i];//输入n个数
//         }
//         sum=0;//可选可能性数量
//         for(a=0;a<(1<<n);a++)
//         {
//             flag=0;
//             for(i=0;i<n;i++)
//             {
//                 if(a&1<<i)
//                 {
//                     flag++;
//                 }
//             }
//             if(flag==k)
//             {
//                 for(i=0;i<n;i++)
//                 {
//                     if(a&1<<i)
//                     {
//                         cout<<s[i]<<" ";
//                     }
//                 }
//                 cout<<endl;
//                 sum++;
//             }
//         }
//         cout<<sum<<endl;
//     }
//     return 0;
// }
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int s[50],n,k,a,i,flag,End;
    while((cin>>n)&&n)
    {
        for(i=0;i<n;i++)
        {
            cin>>s[i];//输入n个数
        }
        for(a=0;a<(1<<n);a++)
        {
            flag=0;
            for(i=0;i<n;i++)
            {
                if(a&1<<i)
                {
                    flag++;
                }
            }
            if(flag==6)
            {
                End=0;
                for(i=0;i<n;i++)
                {
                    if(a&1<<i)
                    {
                        End++;
                        if(End==6)
                            cout<<s[i];
                        else
                        cout<<s[i]<<" ";
                    }
                }
                cout<<endl;
            }
        }
    }
    return 0;
}

// #include <bits/stdc++.h>
// using namespace std;

// int main() {
//     int a[50], k, i1, i2, i3, i4, i5, i6;

//     // 主循环，不断读取输入直到遇到输入为-1为止
//     while (scanf("%d", &k) != -1) {
//         if (k == 0) break;  // 如果输入为0，则跳出循环

//         // 读取 k 个整数放入数组 a 中
//         for (i1 = 1; i1 <= k; i1++)
//             scanf("%d", &a[i1]);

//         // 嵌套循环生成所有六元组组合
//         for (i1 = 1; i1 <= k; i1++) {
//             for (i2 = i1 + 1; i2 <= k; i2++) {
//                 for (i3 = i2 + 1; i3 <= k; i3++) {
//                     for (i4 = i3 + 1; i4 <= k; i4++) {
//                         for (i5 = i4 + 1; i5 <= k; i5++) {
//                             for (i6 = i5 + 1; i6 <= k; i6++) {
//                                 // 输出当前六元组
//                                 printf("%d %d %d %d %d %d\n", a[i1], a[i2], a[i3], a[i4], a[i5], a[i6]);
//                             }
//                         }
//                     }
//                 }
//             }
//         }
//     }

//     return 0;
// }
